home *** CD-ROM | disk | FTP | other *** search
- LF EQU 0AH
- CR EQU 0DH
-
- CODE SEGMENT
- ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
- ORG 100H
- START: JMP L023C
- L014C DB 'Syntax: ATTR [+A|-A] [+S|-S] [+H|-H] [+R|-R] '
- DB '[drive:][path\]filename.ext',CR,LF
- DB ' Archive System Hidden Read-Only',CR,LF,LF
- DB 'Note: if Vol flag is set, other flags can not be changed',CR,LF
- DB '$'
- L01C0 DB 'Needs DOS 2.0 +$'
- L01D6 DB 'Incorrect flag$'
- L01EB DB 'Incorrect File Spec$'
- L0205 DB 9,' ,;=',CR
- L020B DB 'ASHR',20H,4,2,1
- L0213 DB ' $'
- L0218 DB 'Arc $'
- DB 'Dir $'
- DB 'Vol $'
- DB 'Sys $'
- DB 'Hid $'
- DB 'R-O$'
- L0235 DB 0
- L0236 DB 0
- L0237 DB 0
- L0238 DW 0
- L023A DW 0
- L023C: MOV AH,30H
- INT 21H
- CMP AL,2
- JNB L024D
- MOV DX,OFFSET L01C0
- L0247: MOV AH,9
- INT 21H
- INT 20H
- L024D: MOV SI,81H
- CLD
- L0251: LODSB
- MOV DI,OFFSET L0205
- MOV CX,5
- REPNZ SCASB
- JZ L0251
- MOV DX,OFFSET L014C
- CMP AL,0DH
- JZ L0247
- MOV DI,OFFSET L0237
- CMP AL,'+'
- JZ L0271
- DEC DI
- CMP AL,'-'
- JNZ L0292
- L0271: MOV BYTE PTR L0235,0FFH
- LODSB
- AND AL,0DFH
- MOV BX,OFFSET L020B
- MOV CX,4
- L027F: CMP AL,[BX]
- JZ L028B
- INC BX
- LOOP L027F
- MOV DX,OFFSET L01D6
- JMP SHORT L0247
- L028B: MOV AL,[BX+4]
- OR [DI],AL
- JMP SHORT L0251
- L0292: NOT BYTE PTR L0236
- MOV L0238,SI
- DEC WORD PTR L0238
- L029E: LODSB
- MOV DI,OFFSET L0205
- MOV CX,6
- REPNZ SCASB
- JNZ L029E
- DEC SI
- MOV BYTE PTR [SI],0
- MOV CX,SI
- MOV SI,L0238
- SUB CX,SI
- MOV DI,OFFSET (L0373+43)
- MOV L023A,DI
- L02BC: LODSB
- STOSB
- CMP AL,':'
- JZ L02C6
- CMP AL,'\'
- JNZ L02CA
- L02C6: MOV L023A,DI
- L02CA: LOOP L02BC
- MOV DX,OFFSET L0373
- MOV AH,1AH
- INT 21H
- MOV DX,L0238
- MOV CX,1FH
- MOV AH,4EH
- L02DC: INT 21H
- JNB L02EE
- CMP AX,12H
- JNZ L02E8
- JMP L0366
- L02E8: MOV DX,OFFSET L01EB
- JMP L0247
- L02EE: MOV SI,OFFSET (L0373+30)
- CMP BYTE PTR [SI],'.'
- JNZ L02F4
- JMP L0361
- L02F4: TEST BYTE PTR L0235,0FFH
- JZ L02F8
- MOV CL,BYTE PTR (L0373+21)
- AND CL,3FH
- AND CL,L0236
- OR CL,L0237
- CMP CL,BYTE PTR (L0373+21)
- JZ L0361
- L02F8: MOV DI,L023A
- MOV CX,0EH
- L0300: LODSB
- STOSB
- OR AL,AL
- JZ L030B
- CALL L0368
- LOOP L0300
- L030B: MOV AL,' ' ;' '
- CALL L0368
- LOOP L030B
- MOV DX,OFFSET (L0373+43)
- MOV CL,BYTE PTR (L0373+21)
- TEST BYTE PTR L0235,0FFH
- JZ L0331
- AND CL,2FH
- AND CL,L0236
- OR CL,L0237
- MOV AX,4301H
- INT 21H
- MOV AX,4300H
- INT 21H
- JNB L0331
- MOV CL,BYTE PTR (L0373+21)
- L0331: MOV BL,CL
- SHL BL,1
- SHL BL,1
- MOV CX,6
- MOV DX,OFFSET L0218
- L0345: PUSH DX
- SHL BL,1
- JB L034D
- MOV DX,OFFSET L0213
- L034D: MOV AH,9
- INT 21H
- POP DX
- ADD DX,5
- LOOP L0345
- MOV AL,CR
- CALL L0368
- MOV AL,LF
- CALL L0368
- L0361: MOV AH,4FH
- JMP L02DC
- L0366: INT 20H
- L0368: PUSH AX
- PUSH DX
- MOV DL,AL
- MOV AH,2
- INT 21H
- POP DX
- POP AX
- RET
- L0373 DB 0,0,0,0,0
- CODE ENDS
- END START
- L0368: PUSH